package com.my.main.common.utils;

import java.lang.reflect.Field;
import java.lang.reflect.Modifier;

public class ReflectUtil {

	
	/*	public static void main(String args[]) throws Exception {      
		setFinalStatic(Configure.class.getDeclaredField("ROOT_RealPath"), "fsafsadf");
		System.out.println(Configure.ROOT_RealPath);
	}*/
	
	
	/**
	 * 设置属性的值
	 * 
	 * @param 	field			属性
	 * @param 	newValue		值
	 */
	public static void setFinalStatic(Field field, Object newValue) throws Exception {
		field.setAccessible(true);
		
		Field modifiersField = Field.class.getDeclaredField("modifiers");
		modifiersField.setAccessible(true);
		modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL);
	
		field.set(null, newValue);
	}
	
	
	/**
	 * 获取类里一个属性的数据类型
	 * 
	 * @param 	clazz		类
	 * @param 	field_name	属性名
	 */
	public static String getFieldType(Class<?> clazz, String field_name) {
		
		Field[] fields = clazz.getDeclaredFields();
		for (Field field : fields) {
			if (!field.getName().equals(field_name)) {
				continue;
			}
			
			if (field.getGenericType().toString().equals("class java.lang.String")) {
				return "String";
			}
			if (field.getGenericType().toString().equals("class java.util.Date")) {
				return "Date";
			}
			if (field.getGenericType().toString().equals("class java.math.BigDecimal")) {
				return "BigDecimal";
			}
			if (field.getGenericType().toString().equals("class java.lang.Integer")) {
				return "Integer";
			}
			if (field.getGenericType().toString().equals("class java.lang.Boolean")) {
				return "Boolean";
			}
			if (field.getGenericType().toString().equals("class java.lang.Long")) {
				return "Long";
			}
			if (field.getGenericType().toString().equals("class java.lang.Double")) {
				return "Double";
			}
			if (field.getGenericType().toString().equals("class java.lang.Float")) {
				return "Float";
			}
		}

		return null;
		
	}
	
	/**
	 * 判断类中是否有指定的字段
	 * 
	 * @param clazz
	 * @param fieldName
	 * @return
	 */
	public static boolean existsField(Class<?> clazz,String fieldName) {
		
		Field[] fields = clazz.getDeclaredFields();
		for(Field field : fields) {
			if(field.getName().equals(fieldName)) {
				return true;
			}
		}
	    return false;
	    
	}
	
}